package cn.hbu.zlfw.common.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.hibernate.Query;
/**
 * 
 *@ClassName:Utility.java
 *@Description:  工具方法
 *@Author:lxt<839376636@qq.com>
 *@Date:2017年10月6日下午6:45:06
 *@Version:1.1.0
 */
public class Utility {
	
	/**
	 * 生成唯一的UUID,主要用户实体类的主键字段
	 * 
	 * @return 唯一的 UUID
	 */
	public static String getUUID() {

		return java.util.UUID.randomUUID().toString().trim().replaceAll("-", "");
	}
	/**
	 * 生成当前时间的yyyyMMdd形式的格式时间，用于存储文件的分类
	 * @return 当前格式化日期
	 */
	public static String getFormatDate() {
		return (new SimpleDateFormat("yyyyMMdd")).format(new Date());
	}
	
	/**
	 * 
	 * @Title: getListString 
	 * @Description: 将一个list转换成一个字符串，每两个元素之间用逗号隔开
	 * @param list
	 * @return String   
	 * @throws
	 */
	public static String getListString(List<String> list) {
		StringBuffer sbf = new StringBuffer();
		for (int i = 0; i < list.size(); i++) {
			if(i == (list.size() - 1)) {
				sbf.append(list.get(i).trim());
			} else {
				sbf.append(list.get(i).trim() + ",");
			}
		}
		return sbf.toString();
	}
	/**
	 * 
	 * @Title: getArrayString 
	 * @Description: 将一个数组转换成一个字符串，每两个元素之间用逗号隔开
	 * @param array
	 * @return String   
	 * @throws
	 */
	public static String getArrayString(String[] array) {
		StringBuffer sbf = new StringBuffer();
		for (int i = 0; i < array.length; i++) {
			if(i == (array.length-1)) {
				sbf.append(array[i].trim());
			} else {
				sbf.append(array[i].trim() + ",");
			}
		}
		return sbf.toString();
	}
	/**
	 * 获得一个Long类型的随机数
	 * 
	 * @param min
	 *            最小数
	 * @param max
	 *            最大数
	 * @return 返回一个在介于最大数据和最小数据之间的数据
	 */
	public static long getRandom(int min, int max) {
		return new Random().nextInt(max) + min;
	}
	
	

	/**
	 * 
	 * @Title: queryHelperUtil 
	 * @Description: 键值对参数赋值，注意集合形式的处理
	 * @param query
	 * @param params
	 * @return Query
	 */
	public static Query queryParameterUtil(Query query,Map<String, Object> params) {
		if(params!=null && !params.isEmpty()) {
			for (Map.Entry<String, Object> entry : params.entrySet()) {
				if(entry.getValue() instanceof Collection) {
					query.setParameterList(entry.getKey().toString(), (Collection)entry.getValue());
				}else {
					query.setParameter(entry.getKey().toString(), entry.getValue());
				}
			}
		}
		return query;
	}
	
	/**
	 * 
	 * @Title: getMapInstance 
	 * @Description: 创建map对象
	 * @return Map<String,Object>
	 */
	public static Map<String,Object> getMapInstance(){
		return new HashMap<String, Object>();
	}
	
	
	/**
	 * 
	 * @Title: getPropertyCollectByReflect 
	 * @Description: 通过反射获取某属性的get方法值
	 * @param obj
	 * @param propertyName
	 * @return Object
	 */
	public static Object getPropertyCollectByReflect(Object obj,String propertyName){
		Class clazz = obj.getClass();
		PropertyDescriptor pd;
		try {
			pd = new PropertyDescriptor(propertyName,   clazz);
			if(pd!=null){
				Method getPropertyMethod  = pd.getReadMethod();
				Object propertyObj = getPropertyMethod.invoke(obj);
				if(propertyObj!=null){
					return propertyObj;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 
	 * @Title: setPropertyByReflect 
	 * @Description: 通过反射赋值
	 * @param obj
	 * @param setMethod
	 * @param value
	 * @return Object
	 */
	public static Object setPropertyByReflect(Object obj,String setMethod,String value){
		Class clazz = obj.getClass();
		Method method;
		try {
			method = clazz.getMethod(setMethod, String.class);
			method.invoke(obj, value);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		return obj;
	}
	
	
	
}
